let http = require('http');
function middleware1(req,res,next){
  console.log('中间件1','before next');//1
  next();// 作用是什么 调用下一个中间件了
  console.log('中间件1','after next');//4  //6
}

function middleware2(req,res,next){
  console.log('中间件2','before next');//2
  next();// 作用是什么 调用下一个中间件了
  console.log('中间件2','after next');//5  //5
}
function middleware3(req,res,next){
  console.log('中间件3','before next');//3
  next();// 作用是什么 调用下一个中间件了
  console.log('中间件3','after next');//6  //4
}
// 
function express(){
  const fns = [];
  let i = 0;
  const app = function(req,res){
    // 执行task
    function next(){
      // 把 task取出来 第一次取出来的是 第一个middleware
      const task = fns[i++];
      if(!task){
        return
      }
      task(req,res,next)
    }
    next();
  }
  app.use = function(task){
    // 把task (req,res,next) 变成 数组
    fns.push(task); // 3个回调
  }
  
  // 返回值 app的实例
  return app;
}

const app = express();
http.createServer(app).listen(3001,function(){
  console.log('listening 3001..');
})

app.use(middleware1);
app.use(middleware2);
app.use(middleware3);